package com.typ.blog.controller;

import com.github.pagehelper.PageInfo;
import com.typ.blog.entity.Article;
import com.typ.blog.entity.Classification;
import com.typ.blog.service.ArticleService;
import com.typ.blog.service.ClassificationService;
import com.typ.blog.utils.UUIDUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 路径：com.typ.blog.controller.ArticleController.java
 * 类名：ArticleController.java
 * 功能：文章
 * 备注：
 * 创建人：typ
 * 创建时间：2019/10/22 21:35
 * 修改人：
 * 修改备注：
 * 修改时间：
 */
@Slf4j
@Controller
public class ArticleController {

    // 回显图片路径
    @Value("${file.uploadImage}")
    private String uploadImage;

    // 存储图片路径
    @Value("${file.imagePath}")
    private String imagePath;

    @Autowired
    private ArticleService articleService;

    @Autowired
    private ClassificationService classificationService;

    @RequestMapping("home")
    public String home(Model model) {
        model.addAttribute("active", "home");
        return "admin/home";
    }

    /**
     * 方法名：articleList
     * 功能：列表跳转
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/21 21:00
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("articleList")
    public String list(Model model,
                       @RequestParam(required = false, defaultValue = "1") Integer pageNum,
                       @RequestParam(required = false, defaultValue = "10") Integer pageSize,
                       @RequestParam(required = false, defaultValue = "") String search) {
        PageInfo<Article> articleList = articleService.list(pageNum, pageSize, search);
        model.addAttribute("aList", articleList);
        model.addAttribute("search", search);
        model.addAttribute("active", "articleList");
        return "admin/articleList";
    }

    /**
     * 方法名：qryById
     * 功能：根据id获取文章内容
     * 描述：
     * 创建人：typ
     * 创建时间：2019/10/27 18:24
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("qryByArticleId")
    public String qryById(Model model, String id) {
        Article article = articleService.qryById(id);
        model.addAttribute("article", article);

        Map<String, List<Classification>> classification = classificationService.classification();
        model.addAttribute("types", classification.get("types"));
        model.addAttribute("classifys", classification.get("classifys"));
        model.addAttribute("active", "articleEdit");
        return "admin/articleEdit";
    }

    /**
     * 方法名：del
     * 功能：删除
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/16 23:51
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("articleDel")
    public String del(Model model, String id) {
        articleService.del(id);
        model.addAttribute("active", "articleList");
        return "redirect:articleList";
    }

    /**
     * 方法名：edit
     * 功能：编辑博客
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/2 13:33
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("articleEdit")
    public String edit(Model model) {
        Map<String, List<Classification>> classification = classificationService.classification();
        model.addAttribute("types", classification.get("types"));
        model.addAttribute("classifys", classification.get("classifys"));
        model.addAttribute("active", "articleEdit");
        return "admin/articleEdit";
    }

    /**
     * 方法名：editSubmit
     * 功能：添加博客
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/2 13:33
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("editArticleSubmit")
    public String editSubmit(Model model, Article article) {
        int row = articleService.save(article);
        if (row > 0) {
            model.addAttribute("active", "articleList");
            return "redirect:articleList";
        }
        model.addAttribute("active", "articleEdit");
        return "redirect:articleEdit";
    }

    /**
     * 方法名：
     * 功能：《用一句话描述一下》
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/21 21:00
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("isArticleEnable")
    public String isEnable(Model model, String id, Integer enable) {
        int rows = articleService.isEnable(id, enable);
        if (rows > 0) {
            model.addAttribute("active", "articleList");
            return "redirect:articleList";
        }
        model.addAttribute("active", "articleList");
        return "redirect:articleList";
    }

    /**
     * 方法名：uploadImg
     * 功能：上传图片
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/2 13:33
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("uploadImg")
    @ResponseBody
    public Map<String, Object> uploadImg(@RequestParam(value = "editormd-image-file", required = false) MultipartFile file) {
        Map<String, Object> result = new HashMap<>();
        // 获取图片原名称
        String imgName = file.getOriginalFilename();
        // 图片重命名
        String reImgName = UUIDUtils.getUUID(10) + imgName.substring(imgName.lastIndexOf("."));
        //保存
        try {
            byte[] bytes = file.getBytes();
            Path path = Paths.get(imagePath + reImgName);
            Files.write(path, bytes);
            result.put("success", 1);
            result.put("message", "上传成功！");
            result.put("url", uploadImage + reImgName);
        } catch (Exception e) {
            result.put("success", 0);
            result.put("message", "上传失败！");
            e.printStackTrace();
        }
        return result;
    }

}
